#include <stack>
#include <string>
using namespace std;
class Solution
{
public:
    string decodeString(string s)
    {
        string ans = "";
        // 数字 入栈 右括号 取栈顶 * 字符串
        stack<int> st_num;
        stack<string> st_str;
        int i = 0;
        while (i < s.size())
        {
            if (islower(s[i]))
            {
                string temp = "";
                while (i < s.size() && islower(s[i]))
                {
                    temp.push_back(s[i++]);
                }
                // 前面没有括号
                if (st_num.empty())
                    ans += temp;
                else
                    // 当前括号的临时值
                    st_str.top() += temp;
            }
            else if (isdigit(s[i]))
            {
                size_t pos_l = s.find('[', i);
                st_num.push(stoi(s.substr(i, pos_l - i)));
                // 这个中括号的结果
                st_str.push("");
                i = pos_l + 1;
            }
            else if (s[i] == ']')
            {
                string temp = "";
                int num = st_num.top();
                st_num.pop();
                while (num--)
                {
                    temp += st_str.top();
                }
                st_str.pop();
                // 前面还有括号 更新当前括号的值
                if (st_num.empty())
                    ans += temp;
                // 前面没有括号
                else
                    st_str.top() += temp;
                i++;
            }
        }
        return ans;
    }
};